Video information and rendered graphical images are being combined in an increasing number of applications. Examples include animated icons, on screen menus, video windows in a graphical display, etc. As increasingly integrated systems are developed, common circuitry within the systems must satisfy the needs of both the graphical image processing and the video image processing. One example of such a shared resource is memory.
Graphical information is typically stored in memory in a linear format. In a linear format, data is typically stored sequentially in a localized portion of the memory and accessed in a similar sequential manner. Video information, however, is often stored in a tiled format that allows small, localized portions of a video image to be accessed more rapidly. In an integrated video graphics system, both of these formats must be supported by the circuitry that controls memory accesses.
Because the video information and the graphical information are processed and displayed concurrently, it is important that the two types of data are able to be stored and retrieved from the memory in an efficient manner. One of the problems that arises in storing and retrieving these different types of data from memory is the timing penalties associated with page faults. A page fault occurs when a read or write to one page in memory is immediately followed by a read or write to a different page in the memory block. In order to prepare the memory for the access to the new memory block, additional time must be incurred. In the situation where there is frequent toggling between different memory clients within the video graphics system, each of which may be accessing data on different pages, it is important to try and mask or hide the timing penalties associated with these page faults.
In prior arts systems, linear memory clients typically stored large blocks of linear data within a single page of the memory. Tiled clients typically perform scattered accesses to smaller portions of the memory, each of which may be located on a separate page. In this prior art situation, it is very difficult to hide page faults because all of the accesses are occurring within a single block or portion of the memory. Thus, in most cases, when a client began a new access to the memory, the timing penalties associated with a page fault would be incurred.
In mixed video graphics systems, real time video is often displayed. In such situations, it is very important that the memory accesses that retrieve both video and graphical information for display are as efficient as possible in order to insure that video frames are not dropped or rendered in a corrupted manner. In such situations, the penalties associated with page faults are very detrimental to the operation of the system. Although one solution to the problem associated with page faults is to add additional memory blocks or increase the bandwidth of the memory to compensate for the penalties, these solutions add cost and complexity to the system, thus removing some of the benefits of integration.
Therefore a need exists for a method and apparatus for sequencing memory accesses such that the penalties associated with page faults are avoided or effectively hidden when they are unavoidable.